package parsing

import (
	"data-process/function"
	"strconv"
	"strings"
)

// FloatParse 浮点解析器
type FloatParse struct {
	field    string            // 属性
	key      string            // key
	value    float64           // 默认的value值
	size     int               // 需要生成的数据量
	function function.FuncBase // 函数
}

func (f *FloatParse) parse() {
	if strings.Contains(f.key, "|") {
		keys := strings.Split(f.key, "|")
		f.field = keys[0]
		if keys[1][0] == '.' {
			f.function = function.SpecifyFloat(f.size, keys[1])
		} else {
			split := strings.Split(keys[1], "-")
			start, _ := strconv.ParseFloat(split[0], 64)
			end, _ := strconv.ParseFloat(split[1], 64)
			f.function = function.RangeFloat(f.size, start, end, ".2")
		}
	} else {
		f.field = f.key
		f.function = function.DefaultFloat(f.size)
	}
}

func (f FloatParse) Build() (string, []interface{}, error) {
	f.parse()
	return f.field, f.function.Build(), nil
}

func NewFloatParse(key string, value float64, size int) *FloatParse {
	if size == 0 {
		size = 10
	}
	return &FloatParse{
		key:   key,
		value: value,
		size:  size,
	}
}
